home *** CD-ROM | disk | FTP | other *** search
/ The Arsenal Files 6 / The Arsenal Files 6 (Arsenal Computer).ISO / os2 / blt2_205.zip / BULLET2.H < prev    next >
C/C++ Source or Header  |  1996-02-26  |  27KB  |  623 lines

  1.  
  2. /* BULLET2.H    3-Jan-96-chh
  3.  *
  4.  *  Bullet/2 header for 32-bit C/C++
  5.  *  Bullet call numbers, parameter packs, and error number equates
  6.  *
  7.  */
  8.  
  9. #ifndef __BULLET_H
  10. #define __BULLET_H
  11.  
  12. /*
  13.  * The #pragma pack(1)/#pragma pack() is no longer required since all
  14.  * structure members in this header will align properly -- all are
  15.  * 32-bit size except for the structure "FieldDescType", but fieldDA
  16.  * member (a LONG) is at a 32-bit alignment already (at byte offset +12).
  17.  * The altFieldLength member, same structure, is also already at
  18.  * proper alignment for a 16-bit value (at byte offset +18).  If, for
  19.  * some reason, your compiler aligns the members differently, then you
  20.  * must use the appropriate compiler pragma to prevent this -- the
  21.  * FieldDescType size is 32 bytes exactly.  It is not likely that any
  22.  * conforming compiler will alter this structure, but, now you know what
  23.  * to do if it does.
  24.  *
  25.  * #pragma pack(1)
  26.  *
  27.  * NOTE: In your program source code, when you layout your record buffer
  28.  * structure, you must use the #pragma pack(1)/#pragma pack() directives
  29.  * around it since it will be, most likely, modified.  The reason is that
  30.  * this structure MUST start with the implicit TAG field (a BYTE), and so,
  31.  * unless you use only BYTE/CHAR members in your structure (Bullet can use
  32.  * binary field values), or take special care to align the record layout
  33.  * so no padding is performed by the compiler, then you will need to use
  34.  * the pack(1) pragma.
  35.  *
  36.  * #pragma pack()
  37.  */
  38.  
  39. /* the following are assumed defined in OS2DEF.H
  40.  *
  41.  * #define VOID void
  42.  * #define SHORT short
  43.  * #define LONG long
  44.  * #define CHAR char
  45.  *
  46.  * typedef unsigned char BYTE;
  47.  * typedef unsigned short USHORT;
  48.  * typedef unsigned long ULONG;
  49.  * typedef unsigned char *PSZ;
  50.  * typedef VOID *PVOID;
  51.  *
  52.  * typedef unsigned long APIRET;
  53.  * #define APIENTRY _System (right-to-left, caller cleans stack, etc.)
  54.  *
  55.  * Note: Some compilers may name "_System" differently, like __syscall...
  56.  *       ...it won't make a difference so long as APIENTRY equates to this
  57.  */
  58.  
  59. #ifdef __cplusplus
  60.    extern "C" {
  61. #endif
  62.  
  63. LONG APIENTRY BULLET(PVOID datapack);
  64.  
  65. // Bullet can return negative result code so use LONG rather than APIRET
  66.  
  67. #ifdef __cplusplus
  68.    }
  69. #endif
  70.  
  71. /* All Bullet routines are mutex-semaphore protected except the following:
  72.  *
  73.  * MEMORY_XB            STAT_HANDLE_XB          GET_ERROR_CLASS_XB
  74.  * QUERY_SYSVARS_XB     CHECK_REMOTE_XB
  75.  * STAT_DATA_XB         STAT_INDEX_XB
  76.  *
  77.  * This means that any thread can call the above routines at any time.  All
  78.  * other calls in the current process block until the previous thread exits 
  79.  * BULLET.  The default mutex wait is 0 milliseconds, and can be set via 
  80.  * SET_SYSVARS_XB using the MUTEX_SEM_TIMEOUT index.  In the case of
  81.  * STAT_DATA_XB and STAT_INDEX_XB, these should be used only when there
  82.  * is no chance that another thread may close that file handle while the
  83.  * routine is working.
  84.  *
  85.  */
  86.  
  87.  
  88.  
  89. /* ************************************************************************
  90.  *
  91.  * xxx.func call numbers
  92.  *
  93.  * ************************************************************************/
  94.  
  95. #define GEN_ERR_XB              0
  96. #define INIT_XB                 1  /* system */
  97. #define EXIT_XB                 2
  98. #define MEMORY_XB               4
  99. #define BACKUP_FILE_XB          6
  100. #define STAT_HANDLE_XB          7
  101. #define GET_ERROR_CLASS_XB      8
  102.  
  103. #define QUERY_SYSVARS_XB        10 /* advanced system */
  104. #define SET_SYSVARS_XB          11
  105.  
  106. #define CREATE_DATA_XB          20 /* data control mid-level */
  107. #define OPEN_DATA_XB            21
  108. #define CLOSE_DATA_XB           22
  109. #define STAT_DATA_XB            23
  110. #define READ_DATA_HEADER_XB     24
  111. #define FLUSH_DATA_HEADER_XB    25
  112. #define COPY_DATA_HEADER_XB     26
  113. #define ZAP_DATA_HEADER_XB      27
  114.  
  115. #define CREATE_INDEX_XB         30 /* key control mid-level */
  116. #define OPEN_INDEX_XB           31
  117. #define CLOSE_INDEX_XB          32
  118. #define STAT_INDEX_XB           33
  119. #define READ_INDEX_HEADER_XB    34
  120. #define FLUSH_INDEX_HEADER_XB   35
  121. #define COPY_INDEX_HEADER_XB    36
  122. #define ZAP_INDEX_HEADER_XB     37
  123.  
  124. #define GET_DESCRIPTOR_XB       40 /* data access mid-level */
  125. #define GET_RECORD_XB           41
  126. #define ADD_RECORD_XB           42
  127. #define UPDATE_RECORD_XB        43
  128. #define DELETE_RECORD_XB        44
  129. #define UNDELETE_RECORD_XB      45
  130. #define PACK_RECORDS_XB         46
  131. #define DEBUMP_RECORD_XB        47
  132.  
  133. #define GET_MEMO_SIZE_XB        50 /* memo access mid-level */
  134. #define GET_MEMO_XB             51
  135. #define ADD_MEMO_XB             52
  136. #define UPDATE_MEMO_XB          53
  137. #define DELETE_MEMO_XB          54
  138. #define MEMO_BYPASS_XB          59 /* see below for bypass ordinals */
  139.  
  140. #define BYPASS_CREATE_MEMO       1 /* The bypass routines are automatically */
  141. #define BYPASS_OPEN_MEMO         2 /* performed by BULLET but can be done */
  142. #define BYPASS_CLOSE_MEMO        3 /* manually, if needed - these numbers are */
  143. #define BYPASS_READ_MEMO_HEADER  4 /* put in MDP.memoBypass, with MDP.func */
  144. #define BYPASS_FLUSH_MEMO_HEADER 5 /* set to MEMO_BYPASS_XB */
  145.  
  146. #define FIRST_KEY_XB            60 /* key access mid-level */
  147. #define EQUAL_KEY_XB            61
  148. #define NEXT_KEY_XB             62
  149. #define PREV_KEY_XB             63
  150. #define LAST_KEY_XB             64
  151. #define STORE_KEY_XB            65
  152. #define DELETE_KEY_XB           66
  153. #define BUILD_KEY_XB            67
  154. #define GET_CURRENT_KEY_XB      68
  155. #define GET_KEY_FOR_RECORD_XB   69
  156.  
  157. #define GET_FIRST_XB            70 /* key and data access high-level */
  158. #define GET_EQUAL_XB            71
  159. #define GET_NEXT_XB             72
  160. #define GET_PREV_XB             73
  161. #define GET_LAST_XB             74
  162. #define INSERT_XB               75
  163. #define UPDATE_XB               76
  164. #define REINDEX_XB              77
  165.  
  166. #define LOCK_XB                 80 /* network control */
  167. #define UNLOCK_XB               81
  168. #define LOCK_INDEX_XB           82
  169. #define UNLOCK_INDEX_XB         83
  170. #define LOCK_DATA_XB            84
  171. #define UNLOCK_DATA_XB          85
  172. #define CHECK_REMOTE_XB         86
  173. #define RELOCK_XB               87
  174. #define RELOCK_INDEX_XB         88
  175. #define RELOCK_DATA_XB          89
  176.  
  177. #define DELETE_FILE_DOS         90 /* DOS file I/O low-level */
  178. #define RENAME_FILE_DOS         91
  179. #define CREATE_FILE_DOS         92
  180. #define OPEN_FILE_DOS           93
  181. #define SEEK_FILE_DOS           94
  182. #define READ_FILE_DOS           95
  183. #define WRITE_FILE_DOS          96
  184. #define CLOSE_FILE_DOS          97
  185. #define ACCESS_FILE_DOS         98
  186. #define EXPAND_FILE_DOS         99
  187. #define MAKE_DIR_DOS            100
  188. #define COMMIT_FILE_DOS         101
  189.  
  190. /* ************************************************************************
  191.  *
  192.  * operating system file I/O equates
  193.  *
  194.  * ************************************************************************/
  195.  
  196. #define READONLY        0x00000000 /* std file access mode */
  197. #define WRITEONLY       0x00000001 /* no underscore used for std equates */
  198. #define READWRITE       0x00000002
  199.  
  200. #define DENYREADWRITE   0x00000010 /* std file share mode, cannot be 0 */
  201. #define DENYWRITE       0x00000020
  202. #define DENYREAD        0x00000030
  203. #define DENYNONE        0x00000040
  204. #define NOINHERIT       0x00000080
  205.  
  206. #define NO_LOCALITY     0x00000000 /* optional cache modes */
  207. #define SEQ_LOCALITY    0x00010000
  208. #define RND_LOCALITY    0x00020000
  209. #define MIX_LOCALITY    0x00030000
  210. #define SKIP_CACHE      0x00100000 /* not inherited by child process */
  211. #define WRITE_THROUGH   0x00400000 /* not inherited by child process */
  212.  
  213.  
  214. #define LOCK_SHARED      1         /* for LP.xlMode and LP.dlMode */
  215. #define LOCK_EXCLUSIVE   0
  216.  
  217. /* ************************************************************************
  218.  *
  219.  * .sortFunction IDs, Query/Set item IDs
  220.  *
  221.  * ************************************************************************/
  222.  
  223. #define CTRYCODE 0      /* signifies default country code (at index create) */
  224. #define CODEPAGE 0      /* signifies default code page (at index create) */
  225.  
  226. #define DUPS_ALLOWED (1 << 16) /* allow duplicate keys (.sortFunction flag) */
  227.  
  228. /* All Bullet system vars set to default values at INIT_XB */
  229. /* Sorts 1-19 also used as CIP.sortFunction (can be OR'ed with DUPS_ALLOWED) */
  230. /* Intrinsic sorts (1-6) are read-only (R-O) */
  231.  
  232. #define ASCII_SORT 1    /* sort by: ASCII value (R-O) */
  233. #define NLS_SORT   2    /* NLS (R-O) */
  234. #define S16_SORT   3    /* 16-bit signed integer (R-O) */
  235. #define U16_SORT   4    /* 16-bit unsigned integer (R-O) */
  236. #define S32_SORT   5    /* 32-bit signed integer (R-O) */
  237. #define U32_SORT   6    /* 32-bit unsigned integer (R-O) */
  238.  
  239. /* sorts 7 to 9 are reserved */
  240. /* Custom sort-compare functions are from 10 to 19 */
  241.  
  242. #define BUILD_KEY_FUNC  20      /* key build function ptr */
  243. #define PARSER_FUNC     21      /* key expression parser function ptr */
  244.  
  245. #define MUTEX_SEM_HANDLE     29 /* handle of Bullet's mutex semaphore (R-O) */
  246. #define LOCK_TIMEOUT         30 /* lock-wait timeout (default=0, no wait)*/
  247. #define MUTEX_SEM_TIMEOUT    31 /* mutex semaphore-wait timeout (def=0,none) */
  248. #define PACK_BUFFER_SIZE     32 /* pack buffer size (def=0, min autosize) */
  249. #define REINDEX_BUFFER_SIZE  33 /* reindex buffer size (def=0, min autosize) */
  250. #define REINDEX_PACK_PCT     34 /* reindex node pack % (default=100, max) */
  251. #define TMP_PATH_PTR         35 /* temporary file path ptr (default=NULL) */
  252. #define REINDEX_SKIP_TAG     36 /* index skip tag select (default=0, none) */
  253. #define COMMIT_AT_EACH       37 /* commit each insert/update in pack (def=0) */
  254. #define MEMO_BLOCKSIZE       38 /* memo block size (default=512 bytes) */
  255. #define MEMO_EXTENSION       39 /* memo filename extension (default='DBT\0') */
  256. #define MAX_DATAFILE_SIZE    40 /* max data size (default=0x7FEFFFFF=2095MB) */
  257. #define MAX_INDEXFILE_SIZE   41 /* max index size (default=0x7FEFFFFF=2095MB)*/
  258. #define ATOMIC_MODE          42 /* bit0=1 atomic next/prev key access (def=0)*/
  259.  
  260. /* ************************************************************************
  261.  *
  262.  * Parameter pack structures, typedefs
  263.  *
  264.  * ************************************************************************/
  265.  
  266. /* AP, CP, CDP, etc., are suggested variable names */
  267.  
  268. typedef struct _ACCESSPACK {
  269. ULONG func;
  270. ULONG stat;
  271. ULONG handle;         /* I, handle of Bullet file to access */
  272. LONG  recNo;          /* IO, record number */
  273. PVOID recPtr;         /* I, programmer's record buffer */
  274. PVOID keyPtr;         /* I, programmer's key buffer */
  275. PVOID nextPtr;        /* I, NULL if not xaction, else next AP in list */
  276. } ACCESSPACK; /* AP */
  277. typedef ACCESSPACK *PACCESSPACK;
  278.  
  279. typedef struct _COPYPACK {
  280. ULONG func;
  281. ULONG stat;
  282. ULONG handle;         /* I, handle of Bullet file to copy */
  283. PSZ   filenamePtr;    /* I, filename to use (drv+path must exist if used) */
  284. } COPYPACK; /* CP */
  285. typedef COPYPACK *PCOPYPACK;
  286.  
  287. typedef struct _CREATEDATAPACK {
  288. ULONG func;
  289. ULONG stat;
  290. PSZ   filenamePtr;    /* I, filename to use */
  291. ULONG noFields;       /* I, 1 to 254 */
  292. PVOID fieldListPtr;   /* I, descriptor list, 1 per field */
  293. ULONG fileID;         /* I, 0x03 for standard DBF, 0x8B if memo file also */
  294. } CREATEDATAPACK; /* CDP */
  295. typedef CREATEDATAPACK *PCREATEDATAPACK;
  296.  
  297. typedef struct _CREATEINDEXPACK {
  298. ULONG func;
  299. ULONG stat;
  300. PSZ   filenamePtr;    /* I, filename to use */
  301. PSZ   keyExpPtr;      /* I, e.g., "SUBSTR(LNAME,1,4)+SSN" */
  302. LONG  xbLink;         /* I, opened data file handle this indexes */
  303. ULONG sortFunction;   /* I, 1-9 system, 10-19 custom */
  304. ULONG codePage;       /* I, 0=use process default */
  305. ULONG countryCode;    /* I, 0=use process default */
  306. PVOID collatePtr;     /* I, NULL=use cc/cp else use passed table for sort */
  307. ULONG nodeSize;       /* I, 512, 1024, or 2048 */
  308. } CREATEINDEXPACK; /* CIP */
  309. typedef CREATEINDEXPACK *PCREATEINDEXPACK;
  310.  
  311. typedef struct _FIELDDESCTYPE {
  312. BYTE  fieldName[11];  /* IO, upper A-Z and _; 1-10 chars, 0-filled, 0-term */
  313. BYTE  fieldType;      /* IO, C,D,L,N, or M */
  314. LONG  fieldDA;        /* x, offset within record (run-time storage option) */
  315. BYTE  fieldLen;       /* IO, C=1-255,D=8,L=1,N=1-19,M=10 */
  316. BYTE  fieldDC;        /* IO, fieldType=N then 0-15 else 0 */
  317. USHORT altFieldLength;/* IO, 0 */
  318. BYTE  filler[12];     /* I, 0 */
  319. } FIELDDESCTYPE; /* nested in _DESCRIPTORPACK */
  320. typedef FIELDDESCTYPE *PFIELDDESCTYPE;
  321.  
  322. typedef struct _DESCRIPTORPACK {
  323. ULONG func;
  324. ULONG stat;
  325. ULONG handle;         /* I, handle of DBF file */
  326. ULONG fieldNumber;    /* IO, first field is 1 */
  327. ULONG fieldOffset;    /* O, offset of field within record (tag=offset 0) */
  328. FIELDDESCTYPE FD;     /* IO FD.fieldName only, O for rest of FD */
  329. } DESCRIPTORPACK; /* DP */
  330. typedef DESCRIPTORPACK *PDESCRIPTORPACK;
  331.  
  332. typedef struct _DOSFILEPACK {
  333. ULONG func;
  334. ULONG stat;
  335. PSZ   filenamePtr;    /* I, filename to use */
  336. ULONG handle;         /* IO, handle of open file */
  337. ULONG asMode;         /* I, access-sharing mode */
  338. ULONG bytes;          /* IO, bytes to read, write, length of */
  339. LONG  seekTo;         /* IO, seek to offset, current offset */
  340. ULONG method;         /* I, seek method (0=start of file, 1=current, 2=end) */
  341. PVOID bufferPtr;      /* I, buffer to read into or write from */
  342. ULONG attr;           /* I, attribute to create file with */
  343. PSZ   newNamePtr;     /* I, name to use on rename */
  344. } DOSFILEPACK; /* DFP */
  345. typedef DOSFILEPACK *PDOSFILEPACK;
  346.  
  347. typedef struct _EXITPACK {
  348. ULONG func;
  349. ULONG stat;
  350. } EXITPACK; /* EP */
  351. typedef EXITPACK *PEXITPACK;
  352.  
  353. typedef struct _HANDLEPACK {
  354. ULONG func;
  355. ULONG stat;
  356. ULONG handle;         /* I, handle of Bullet file */
  357. } HANDLEPACK; /* HP */
  358. typedef HANDLEPACK *PHANDLEPACK;
  359.  
  360. typedef struct _INITPACK {
  361. ULONG func;
  362. ULONG stat;
  363. ULONG JFTsize;        /* I, max opened files (20-1024+) */
  364. ULONG versionDOS;     /* O, e.g., 230 for 2.30 */
  365. ULONG versionBullet;  /* O, e.g., 2019 for 2.019 */
  366. ULONG versionOS;      /* O, e.g., 4=OS/2 32-bit */
  367. PVOID exitPtr;        /* O, function pointer to EXIT_XB routine */
  368. } INITPACK; /* IP */
  369. typedef INITPACK *PINITPACK;
  370.  
  371. typedef struct _LOCKPACK {
  372. ULONG func;
  373. ULONG stat;
  374. ULONG handle;         /* I, handle of Bullet file to lock */
  375. ULONG xlMode;         /* I, index lock mode (0=exclusive, 1=shared) */
  376. ULONG dlMode;         /* I, data lock mode (0=exclusive, 1=shared) */
  377. LONG  recStart;       /* I, if data, first record # to lock, or 0 for all */
  378. ULONG recCount;       /* I, if data and recStart!=0, # records to lock */
  379. PVOID nextPtr;        /* I, NULL if not xaction, else next LP in list */
  380. } LOCKPACK; /* LP */
  381. typedef LOCKPACK *PLOCKPACK;
  382.  
  383. typedef struct _MEMODATAPACK {
  384. ULONG func;
  385. ULONG stat;
  386. ULONG dbfHandle;      /* I, handle of DBF file to which this memo file belongs */
  387. ULONG memoBypass;     /* I, memo bypass function to do, if any */
  388. PVOID memoPtr;        /* I, ptr to memo record buffer */
  389. ULONG memoNo;         /* IO, memo record number (aka block number) */
  390. ULONG memoOffset;     /* I, position within record to start read/update */
  391. ULONG memoBytes;      /* IO, number of bytes to read/update */
  392. } MEMODATAPACK; /* MDP */
  393. typedef MEMODATAPACK *PMEMODATAPACK;
  394.  
  395. typedef struct _MEMORYPACK {
  396. ULONG func;
  397. ULONG stat;
  398. ULONG memory;         /* O, not used in OS/2 */
  399. } MEMORYPACK; /* MP */
  400. typedef MEMORYPACK *PMEMORYPACK;
  401.  
  402. typedef struct _OPENPACK {
  403. ULONG func;
  404. ULONG stat;
  405. ULONG handle;         /* O, handle of file opened */
  406. PSZ   filenamePtr;    /* I, Bullet file to open */
  407. ULONG asMode;         /* I, access-sharing-cache mode */
  408. LONG  xbLink;         /* I, if index open, xbLink=handle of its opened DBF */
  409. } OPENPACK; /* OP */
  410. typedef OPENPACK *POPENPACK;
  411.  
  412. typedef struct _QUERYSETPACK {
  413. ULONG func;
  414. ULONG stat;
  415. ULONG item;           /* I, Bullet sysvar item to get/set */
  416. ULONG itemValue;      /* IO, current/new value */
  417. } QUERYSETPACK; /* QSP */
  418. typedef QUERYSETPACK *PQUERYSETPACK;
  419.  
  420. typedef struct _REMOTEPACK {
  421. ULONG func;
  422. ULONG stat;
  423. ULONG handle;         /* I, handle of file, or if 0, use RP.drive */
  424. ULONG drive;          /* I, drive (1=A,2=B,3=C,...0=current) to check */
  425. ULONG isRemote;       /* O, =1 of handle/drive is remote, =0 if local */
  426. ULONG flags;          /* O, 0 */
  427. ULONG isShare;        /* O, 1 */
  428. } REMOTEPACK; /* RP */
  429. typedef REMOTEPACK *PREMOTEPACK;
  430.  
  431. typedef struct _STATDATAPACK {
  432. ULONG func;
  433. ULONG stat;
  434. ULONG handle;         /* I, handle to check */
  435. ULONG fileType;       /* O, bit0=1 data file */
  436. ULONG flags;          /* O, bit0=1 dirty, bit1=1 full-lock, bit2=1 shared */
  437. ULONG progress;       /* O, 0,1-99% pack progress */
  438. PVOID morePtr;        /* O, 0 */
  439. ULONG fields;         /* O, fields per record */
  440. ULONG asMode;         /* O, access-sharing-cache mode */
  441. PSZ   filenamePtr;    /* O, filename used in open */
  442. ULONG fileID;         /* O, first byte of DBF file */
  443. ULONG lastUpdate;     /* O, high word=year,low byte=day, high byte=month */
  444. ULONG records;        /* O, data records (including "deleted") */
  445. ULONG recordLength;   /* O, record length */
  446. ULONG xactionFlag;    /* O, 0 */
  447. ULONG encryptFlag;    /* O, 0 */
  448. PVOID herePtr;        /* O, this file's control address */
  449. ULONG memoHandle;     /* O, handle of open memo file (0 if none) */
  450. ULONG memoBlockSize;  /* O, memo file block size */
  451. ULONG memoFlags;      /* O, bit0=1 dirty */
  452. ULONG memoLastRecord; /* O, last accessed memo record (0 if none) */
  453. ULONG memoLastSize;   /* O, size of last accessed memo record (in bytes, +8) */
  454. ULONG lockCount;      /* O, number of full-locks in force */
  455. } STATDATAPACK; /* SDP */
  456. typedef STATDATAPACK *PSTATDATAPACK;
  457.  
  458. typedef struct _STATHANDLEPACK {
  459. ULONG func;
  460. ULONG stat;
  461. ULONG handle;         /* I, handle to check */
  462. LONG  ID;             /* O, bit0=1 data file, bit0=1 index file */
  463. } STATHANDLEPACK; /* SHP */
  464. typedef STATHANDLEPACK *PSTATHANDLEPACK;
  465.  
  466. typedef struct _STATINDEXPACK {
  467. ULONG func;
  468. ULONG stat;
  469. ULONG handle;         /* I, handle to check */
  470. ULONG fileType;       /* O, bit0=0 index file */
  471. ULONG flags;          /* O, bit0=1 dirty, bit1=1 full-lock, bit2=1 shared */
  472. ULONG progress;       /* O, 0,1-99% reindex progress */
  473. PVOID morePtr;        /* O, 0 */
  474. ULONG xbLink;         /* O, XB file link handle */
  475. ULONG asMode;         /* O, access-sharing-cache mode */
  476. PSZ   filenamePtr;    /* O, pointer to filename used in open */
  477. ULONG fileID;         /* O, "31ch" */
  478. PSZ   keyExpPtr;      /* O, pointer to key expression */
  479. ULONG keys;           /* O, keys in file */
  480. ULONG keyLength;      /* O, key length */
  481. ULONG keyRecNo;       /* O, record number of current key */
  482. PVOID keyPtr;         /* O, ptr to current key value (valid to keyLength) */
  483. PVOID herePtr;        /* O, this file's control address */
  484. ULONG codePage;       /* O, code page at create time */
  485. ULONG countryCode;    /* O, country code at create time */
  486. PVOID CTptr;          /* O, collate table ptr, NULL=no collate table present */
  487. ULONG nodeSize;       /* O, node size */
  488. ULONG sortFunction;   /* O, sort function ID */
  489. ULONG lockCount;      /* O, number of full-locks in force */
  490. } STATINDEXPACK; /* SIP */
  491. typedef STATINDEXPACK *PSTATINDEXPACK;
  492.  
  493. typedef struct _XERRORPACK {
  494. ULONG func;
  495. ULONG stat;           /* I, error to check */
  496. ULONG errClass;       /* O, class of error */
  497. ULONG action;         /* O, action recommended for error */
  498. ULONG location;       /* O, location of error */
  499. } XERRORPACK; /* XEP */
  500. typedef XERRORPACK *PXERRORPACK;
  501.  
  502.  
  503. /* ************************************************************************
  504.  *
  505.  * Error codes
  506.  *
  507.  * ************************************************************************/
  508.  
  509. #define EXB_NOT_ENOUGH_MEMORY   8  /* cannot get memory requested */
  510. #define EXB_UNEXPECTED_EOF      38 /* unexpect EOF (bytes read != bytes asked) */
  511. #define EXB_DISK_FULL           39 /* disk full on WriteFile */
  512. #define EXB_FILE_EXISTS         80 /* cannot create file since it already exists */
  513.  
  514. /* Other operating system errors are as returned by OS itself */
  515.  
  516. /* System/general error codes */
  517.  
  518. #define EXB_OR_WITH_FAULTS      8192 /* 8192+1 to +4, close-type errors */
  519. #define EXB_ILLEGAL_CMD         8300 /* function not allowed */
  520. #define EXB_OLD_DOS             8301 /* OS version < MIN_DOS_NEEDED */
  521. #define EXB_NOT_INITIALIZED     8302 /* init not active, must do INIT_XB */
  522. #define EXB_ALREADY_INITIALIZED 8303 /* init already active, must do EXIT_XB */
  523. #define EXB_TOO_MANY_HANDLES    8304 /* more than 1024 opens requested */
  524. #define EXB_SYSTEM_HANDLE       8305 /* Bullet won't use or close handles 0-2 */
  525. #define EXB_FILE_NOT_OPEN       8306 /* file not open (not Bullet handle, including xbLink) */
  526. #define EXB_FILE_IS_DIRTY       8307 /* tried to reload header but current still dirty */
  527. #define EXB_BAD_FILETYPE        8308 /* tried key op on non-key file, data op on non... */
  528. #define EXB_TOO_MANY_PACKS      8309 /* too many INSERT,UPDATE,REINDEX,LOCK_XB packs */
  529. #define EXB_NULL_RECPTR         8310 /* null record pointer passed to Bullet */
  530. #define EXB_NULL_KEYPTR         8311 /* null key pointer passed to Bullet */
  531. #define EXB_NULL_MEMOPTR        8312 /* null memo pointer passed to Bullet */
  532. #define EXB_EXPIRED             8313 /* evaluation time period has expired */
  533. #define EXB_BAD_INDEX           8314 /* Query/SetSysVars index beyond last one */
  534. #define EXB_RO_INDEX            8315 /* SetSysVar index item is read-only */
  535. #define EXB_FILE_BOUNDS         8316 /* file size > 4GB, or > system var sets */
  536.  
  537. /* Multi-access error codes */
  538.  
  539. #define EXB_BAD_LOCK_MODE       8401 /* lock mode (LP) not valid */
  540. #define EXB_NOTHING_TO_RELOCK   8402 /* cannot relock without existing full-lock */
  541. #define EXB_SHARED_LOCK_ON      8403 /* write access needed but lock is shared (flush on backup) */
  542.  
  543. /* Index error codes */
  544.  
  545. #define EXB_KEY_NOT_FOUND       8501 /* exact match of key not found */
  546. #define EXB_KEY_EXISTS          8502 /* key exists already and dups not allowed */
  547. #define EXB_END_OF_FILE         8503 /* already at last index order */
  548. #define EXB_TOP_OF_FILE         8504 /* already at first index order */
  549. #define EXB_EMPTY_FILE          8505 /* nothing to do since no keys */
  550. #define EXB_CANNOT_GET_LAST     8506 /* cannot locate last key */
  551. #define EXB_BAD_INDEX_STACK     8507 /* index file is corrupt */
  552. #define EXB_BAD_INDEX_READ0     8508 /* index file is corrupt */
  553. #define EXB_BAD_INDEX_WRITE0    8509 /* index file is corrupt */
  554.  
  555. #define EXB_OLD_INDEX           8521 /* old index, run through ReindexOld to update */
  556. #define EXB_UNKNOWN_INDEX       8522 /* not a Bullet index file */
  557. #define EXB_KEY_TOO_LONG        8523 /* keylength > 62 (or 64 if unique), or is 0 */
  558.  
  559. #define EXB_PARSER_NULL         8531 /* parser function pointer is NULL */
  560. #define EXB_BUILDER_NULL        8532 /* build key function pointer is NULL */
  561. #define EXB_BAD_SORT_FUNC       8533 /* CIP.sortFunction not valid */
  562. #define EXB_BAD_NODE_SIZE       8534 /* CIP.nodeSize is not 512, 1024, or 2048 */
  563. #define EXB_FILENAME_TOO_LONG   8535 /* CIP.filenamePtr->pathname > max path length */
  564.  
  565. #define EXB_KEYX_NULL           8541 /* expression is effectively NULL */
  566. #define EXB_KEYX_TOO_LONG       8542 /* CIP.keyExpPtr->expression > 159 */
  567. #define EXB_KEYX_SYM_TOO_LONG   8543 /* fieldname/funcname in expression > 10 chars */
  568. #define EXB_KEYX_SYM_UNKNOWN    8544 /* fieldname/funcname in expression unknown */
  569. #define EXB_KEYX_TOO_MANY_SYMS  8545 /* too many symbols/fields used in expression */
  570. #define EXB_KEYX_BAD_SUBSTR     8546 /* invalid SUBSTR() operand in expression */
  571. #define EXB_KEYX_BAD_SUBSTR_SZ  8547 /* SUBSTR() exceeds field's size */
  572. #define EXB_KEYX_BAD_FORM       8548 /* didn't match expected symbol in expression */
  573.  
  574. #define EXB_NO_READS_FOR_RUN    8551 /* unlikely, use different reindex buffer size */
  575. #define EXB_TOO_MANY_RUNS       8552 /* unlikely, too many runs (64K or more runs) */
  576. #define EXB_TOO_MANY_RUNS_FOR_BUFFER 8553 /* unlikely, too many runs for run buffer */
  577. #define EXB_TOO_MANY_DUPLICATES 8554 /* more than 64K "identical" keys */
  578.  
  579. #define EXB_INSERT_RECNO_BAD    8561 /* AP.recNo cannot be > 0 if inserting */
  580. #define EXB_PREV_APPEND_EMPTY   8562 /* no prev append for insert yet AP.recNo==80000000h */
  581. #define EXB_PREV_APPEND_MISMATCH 8563 /* prev append's xbLink does not match this */
  582. #define EXB_INSERT_KBO_FAILED   8564 /* could not back out key at INSERT_XB */
  583. #define EXB_INSERT_DBO_FAILED   8565 /* could not back out data records at INSERT_XB */
  584.  
  585. #define WRN_NOTHING_TO_UPDATE   8571 /* all AP.recNo=0 at UPDATE_XB */
  586. #define EXB_INTERNAL_UPDATE     8572 /* internal error UPDATE_XB, not in hdl/rec# list */
  587.  
  588. #define EXB_FAILED_DATA_RESTORE 8573 /* could not restore original data record (*) */
  589. #define EXB_FAILED_KEY_DELETE   8574 /* could not remove new key (*) */
  590. #define EXB_FAILED_KEY_RESTORE  8575 /* could not restore original key(*) */
  591. /* *original error, which forced a back-out, has been replaced by this error */ 
  592. /* this error is always returned in the first AP.stat (-1 on data, 1 on index) */
  593.  
  594. /* Data error codes */
  595.  
  596. #define EXB_EXT_XBLINK          8601 /* xbLink handle is not internal DBF (is -1) */
  597. #define EXB_FIELDNAME_TOO_LONG  8602 /* fieldname is > 10 characters */
  598. #define EXB_RECORD_TOO_LONG     8603 /* record length is > 64K */
  599. #define EXB_FIELD_NOT_FOUND     8604 /* fieldname not found in descriptor info */
  600. #define EXB_BAD_FIELD_COUNT     8605 /* fields <= 0 or >= MAX_FIELDS (Init,Open) */
  601.                                      /* and also GetDescriptor by field number */
  602. #define EXB_BAD_HEADER          8606 /* bad header (reclen=0, etc., from LocateTo, Flush) */
  603. #define EXB_BUFFER_TOO_SMALL    8607 /* buffer too small (pack buffer < reclen in pack) */
  604. #define EXB_INTERNAL_PACK       8608 /* internal error in PackRecords */
  605. #define EXB_BAD_RECNO           8609 /* record number=0 or > records in data file hdr */
  606.                                      /* or Pack on empty data file */
  607. #define WRN_RECORD_TAGGED       8610 /* record's tag field matches skip tag */
  608.  
  609. /* Memo error codes */
  610.  
  611. #define WRN_CANNOT_OPEN_MEMO    8701 /* DBF says memo file but memo open fails */
  612. #define EXB_MEMO_NOT_OPEN       8702 /* no open memo file for operation */
  613. #define EXB_BAD_BLOCKSIZE       8703 /* memo blocksize must be at least 24 bytes */
  614. #define EXB_MEMO_DELETED        8704 /* memo is deleted */
  615. #define EXB_MEMO_PAST_END       8705 /* memo data requested is past end of record */
  616. #define EXB_BAD_MEMONO          8706 /* memo number is not valid */
  617. #define EXB_MEMO_IN_USE         8707 /* memo add encountered likely corrupt memo file */
  618. #define EXB_BAD_AVAIL_LINK      8708 /* memo avail link cannot be valid (is 0) */
  619. #define EXB_MEMO_ZERO_SIZE      8709 /* memo data has no size */
  620. #define EXB_MEMO_IS_SMALLER     8710 /* memo attempt to shrink but already <= size */
  621.  
  622. #endif /* ifndef __BULLET_H */
  623.